package br.com.hs.nfe.common.enumeration;

/**
 * Enumeração de estados, com código e descrição.
 * @author Ranlive Hrysyk
 */
public enum UFEnum {

    /**
     * 12 - AC - Acre
     */
    AC("12", "Acre"),
    /**
     * 27 - AL - Alagoas
     */
    AL("27", "Alagoas"),
    /**
     * 16 - AP - Amapá
     */
    AP("16", "Amapá"),
    /**
     * 13 - AM - Amazonas
     */
    AM("13", "Amazonas"),
    /**
     * 29 - BA - Bahia
     */
    BA("29", "Bahia"),
    /**
     * 23 - CE - Ceará
     */
    CE("23", "Ceará"),
    /**
     * 53 - DF - Distrito Federal
     */
    DF("53", "Distrito Federal"),
    /**
     * 32 - ES - Espiríto Santo
     */
    ES("32", "Espírito Santo"),
    /**
     * 52 - GO - Goiás
     */
    GO("52", "Goiás"),
    /**
     * 21 - MA - Maranhão
     */
    MA("21", "Maranhão"),
    /**
     * 51 - MT - Mato Grosso
     */
    MT("51", "Mato Grosso"),
    /**
     * 50 - MS - Mato Grosso do Sul
     */
    MS("50", "Mato Grosso do Sul"),
    /**
     * 31 - MG - Minas Gerais
     */
    MG("31", "Minas Gerais"),
    /**
     * 15 - PA - Pará
     */
    PA("15", "Pará"),
    /**
     * 25 - PB - Paraíba
     */
    PB("25", "Paraíba"),
    /**
     * 41 - PR - Paraná
     */
    PR("41", "Paraná"),
    /**
     * 26 - PE - Pernambuco
     */
    PE("26", "Pernambuco "),
    /**
     * 22 - PI - Piauí
     */
    PI("22", "Piauí"),
    /**
     * 33 - RJ - Rio de Janeiro
     */
    RJ("33", "Rio de Janeiro"),
    /**
     * 24 - RN - Rio Grande do Norte
     */
    RN("24", "Rio Grande do Norte"),
    /**
     * 43 - RS - Rio Grande do Sul
     */
    RS("43", "Rio Grande do Sul"),
    /**
     * 11 - RO - Rondônia
     */
    RO("11", "Rondônia"),
    /**
     * 14 - RR - Roraima
     */
    RR("14", "Roraima"),
    /**
     * 42 - SC - Santa Catarina
     */
    SC("42", "Santa Catarina"),
    /**
     * 35 - SP - São Paulo
     */
    SP("35", "São Paulo"),
    /**
     * 28 - SE - Sergipe
     */
    SE("28", "Sergipe"),
    /**
     * 17 - TO - Tocantins
     */
    TO("17", "Tocantins"),
    /**
     * 99 - EX - Exterior
     */
    EX("99", "Exterior");
    private final String codigo;
    private final String nome;

    private UFEnum(String codigo, String nome) {
        this.codigo = codigo;
        this.nome = nome;
    }

    /**
     * Código da UF conforme tabela do IBGE.
     */
    public String getCUF() {
        return codigo;
    }

    /*
     * Nome da unidade da federação.
     */
    public String getNomeUF() {
        return nome;
    }

    /**
     * Sigla da UF.
     */
    public String getUF() {
        return name();
    }

    /**
     * Obtém enum pela UF.
     */
    public static UFEnum getEnumByUF(String uf) {
        for (UFEnum e : values()) {
            if (e.getUF().equals(uf)) {
                return e;
            }
        }
        return null;
    }

    /**
     * Obtém enum pelo código da UF.
     */
    public static UFEnum getEnumByCUF(String cUF) {
        for (UFEnum e : values()) {
            if (e.getCUF().equals(cUF)) {
                return e;
            }
        }
        return null;
    }
}
